import axios from 'axios'

// 独立于全局 request 的认证请求实例：不设置 baseURL，走 vite 代理
const authRequest = axios.create({
  timeout: 30000,
  headers: {
    'Content-Type': 'application/json;charset=UTF-8'
  }
})

// 统一只返回服务端 data
authRequest.interceptors.response.use(
  (res) => res.data,
  (err) => Promise.reject(err)
)

export interface PasswordLoginPayload {
  username?: string
  password: string
  phonenumber?: string
}

export interface PhoneLoginPayload {
  phone?: string
  phonenumber?: string
  code: string
}

export interface RegisterPayload {
  username: string
  password: string
  nickname?: string
  phone?: string
}

export const authService = {
  // 用户名/密码登录（/login 接口，后端支持 username 或 phonenumber）
  login(payload: PasswordLoginPayload) {
    return authRequest.post('/login', payload)
  },

  // 发送短信验证码（表单方式，/login/code?phone=xxx）
  sendCode(phone: string) {
    const form = new URLSearchParams()
    form.append('phone', phone)
    // 使用表单提交，明确设置为 x-www-form-urlencoded，避免被全局 json 头覆盖
    return authRequest.post('/login/code', form, {
      headers: { 'Content-Type': 'application/x-www-form-urlencoded' }
    })
  },

  // 手机验证码登录（表单方式，/login/phone?phone=xxx&code=xxx）
  phoneLogin(payload: PhoneLoginPayload) {
    const form = new URLSearchParams()
    form.append('phone', payload.phone || payload.phonenumber || '')
    form.append('code', payload.code)
    return authRequest.post('/login/phone', form, {
      headers: { 'Content-Type': 'application/x-www-form-urlencoded' }
    })
  },

  // 普通注册（/login/register）
  register(payload: RegisterPayload) {
    return authRequest.post('/login/register', payload)
  }
}

